/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ec.edu.espe.ccsoft.mantenimiento.bean;

import ec.edu.espe.ccsoft.mantenimiento.modelos.TipoUnidad;
import ec.edu.espe.ccsoft.mantenimiento.servicios.TipoUnidadServicio;
import ec.edu.espe.ccsoft.mantenimiento.utils.ManejoAcciones;
import ec.edu.espe.ccsoft.mantenimiento.utils.Mensajes;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.primefaces.context.RequestContext;

/**
 *
 * @author Gerardo
 */
@ManagedBean
@SessionScoped
public class TipoUnidadBean extends ManejoAcciones implements Serializable {

    @EJB
    private TipoUnidadServicio tipoUnidadServicio;

    private TipoUnidad tipoUnidad;
    private List<TipoUnidad> tipoUnidades;

    private Mensajes mensaje;

    @PostConstruct
    public void init() {
        tipoUnidades = tipoUnidadServicio.obtenerTodoActivos();
        mensaje = new Mensajes();
    }

    public void cargarNuevo() {
        tipoUnidad = new TipoUnidad();
        super.nuevoRegistro();
    }

    public void cargarModificar() {
        super.modificarRegistro();
    }

    public void cargarDetalle() {
        super.detallesRegistro();
    }

    public void guardar() {
        try {
            TipoUnidad tipoAux = tipoUnidadServicio.findUnidadMedidaByNombre(tipoUnidad.getNombre());
            if (tipoAux == null) {
                tipoUnidad.setEstado(true);
                Date fecha = new Date();
                tipoUnidad.setFechaCreacion(fecha);
                tipoUnidadServicio.CreateTipoUnidad(tipoUnidad);
                tipoUnidades.add(tipoUnidad);
                mensaje.addMessageSuccefull("Información", "El Tipo de Unidad ha sido creado con éxito");
                RequestContext.getCurrentInstance().execute("PF('dlDialogVar').hide();");
                RequestContext.getCurrentInstance().update("@form");
            } else {
                mensaje.addMessageSuccefull("Error", "Ya existe un tipo de unidad con ese nombre.");
            }
        } catch (Exception e) {
            mensaje.addMessageError("Error", "Error al crear el Tipo de Unidad " + e.getMessage());
        }
    }

    public void modificar() {
        try {
            tipoUnidadServicio.UpdateTipoUnidad(tipoUnidad);
            if(!tipoUnidad.getEstado()){
                tipoUnidades.remove(tipoUnidad);
                mensaje.addMessageSuccefull("Información", "El tipo de unidad ha sido eliminado con éxito");
            }
            else{
                mensaje.addMessageSuccefull("Información", "El tipo de unidad ha sido modificado con éxito");
            }
            RequestContext.getCurrentInstance().execute("PF('dlDialogVar').hide();");
            RequestContext.getCurrentInstance().update("@form");
        } catch (Exception e) {
            mensaje.addMessageError("Error", "Error al modificar el Tipo de Unidad " + e.getMessage());
        }
    }

    public TipoUnidad getTipoUnidad() {
        return tipoUnidad;
    }

    public void setTipoUnidad(TipoUnidad tipoUnidad) {
        this.tipoUnidad = tipoUnidad;
    }

    public List<TipoUnidad> getTipoUnidades() {
        return tipoUnidades;
    }

    public void setTipoUnidades(List<TipoUnidad> tipoUnidades) {
        this.tipoUnidades = tipoUnidades;
    }

    public Mensajes getMensaje() {
        return mensaje;
    }

    public void setMensaje(Mensajes mensaje) {
        this.mensaje = mensaje;
    }
}
